#ifndef NETDISK_DIRFUNC_H_
#define NETDISK_DIRFUNC_H_

#include "threadPool.h"

typedef struct dirNode_s {
  int                data;  // 存储目录
  struct dirNode_s *pnext;
} dirNode_t;

typedef struct dirStack_s {  // 目录栈(链栈)
  dirNode_t *bottom;         // 栈底(根目录)
  dirNode_t    *top;         // 栈顶(当前目录)
  int size;  
} dirStack_t;

int initDirStack(dirStack_t *dirstack, int root_dir_id);
int pushDirStack(dirStack_t *dirstack, int data);
int popDirStack(dirStack_t *dirstack);
int cleanDirStack(dirStack_t *dirstack);
int destroyDirStack(dirStack_t *dirstack);
int copyDirStack(dirStack_t *copy, dirStack_t *paste);

int cdFunc(dirStack_t *dirstack, const char* destdir, MYSQL *sql,
    const char *username);  // 相对 绝对
int lsFunc(MYSQL *mysql, dirStack_t *dirstack, const char *username, const char *buf, char *ret_buf);
int pwdFunc(dirStack_t *dirstack, char *pwd_result, MYSQL *sql,
    const char *username);
int mkdirFunc(dirStack_t *pwd, const char *path, MYSQL *conn,
    const char *username);  // 当前目录 支持多重创建 检查是否有该目录 不支持选项
int rmdirFunc(dirStack_t *pwd, const char *dirs, char *error_msg,
    MYSQL *conn, const char* username);  // 当前目录 支持多重删除
                                         // 检查是否有该目录 和 目录是否为空
                                         // 不支持选项

bool isQueryResultExist(MYSQL *conn, const char *sql_query);

#endif  // NETDISK_DIRFUNC_H_
